"""
字典的应用场景：
    1、如果有多个数据，例如：tom 男 20 该如何快速储存？以及如何快速查找？
        使用列表快速存储，list = ["tom", 20, "男"]，
        列表可以使用下标快速查找到想要的数据，list[0]
    2、如果将来数据顺序发生变化，还能使用 list[0] 访问到数据"tom"嘛？ 如：list = [20, "tom", "男"]
        那指定是不能了，因为现在tom的下标是1了，而不是0了
    3、当数据顺序发生变化时，每个数据的下标也会随之改变，如何保证数据顺序变化前后能使用统一的标准查找数据呢？
        字典，字典里面的数据是以键值对的形式存储的，字典数据和数据顺序没有太大的关系，即字典不支持下标，后期无论数据如何变化，只需要按照对应的键查找数据即可。
"""

"""
字典的特点：
    符号位大括号
    数据为键值对的形式出现
    各个键值对之间使用逗号隔开
    PS：字典的key只能是不可变的数据类型，字典的value可以是所有的数据类型
"""
dict1 = {"name": "tom", "age": 20, "sex": "男", }
print(dict1)
print(type(dict1))
print("======================================================")


dict2 = {("name"): "tom", "age": 20, "sex": "男", }
print(dict2)
print(type(dict2))
print("======================================================")


# dict3 = {{"name"}: "tom", "age": 20,"sex": "男",}
# print(dict3)  # TypeError: unhashable type: 'set'  类型错误


"""字典的新增/修改"""
dict_1 = {"name": "tom", "age": 20, "sex": "男"}
# 新增数据
dict_1["height"] = 179  # 没有此key：value，则新增
print(dict_1)

# 修改数据
dict_1["name"] = "小丽"  # 修改--将tom修改成-小丽
print(dict_1)

"""update-新增/修改，两个字典去比较，相同则保留，不同则修改，没有则新增"""
dict_11 = {"name": "tom", "age": 20, "sex": "男"}
dict_22 = {"name": "秀儿", "age": 20, "sex": "男", "country": "中国"}
dict_11.update(dict_22)
print(dict_11)  # 最终dict_11的数据内容改变了，说明字典是可变数据类型的

print("======================================================")

"""查找相关操作"""
dict_2 = {"name": "tom", "age": 20, "sex": "男", "height": 179}
# 根据key查找value，找到则显示出来，找不到则报错
print(dict_2["name"])
# print(dict_2["name11"]) # KeyError: 'name11'

# 使用dict.get(key)方式查找，找到则显示，找不到则返回默认值。好处就是不会抛出错误，从而可以继续的往下执行代码内容
print(dict_2.get("age"))    # 找到内容的
print(dict_2.get("age11","这里可以修改默认返回值None的提示语句。如：本来是返回默认值None的，但是被修改成了找不到对应的数据"))    # 找不到内容的--后面可以修改返回值内容，可以将None修改成其他的提示语句

print("======================================================")

"""删除相关操作"""
dict_3 = {"name": "tom", "age": 20, "sex": "男"}
# 删除单个key:value
del dict_3["name"]
print(dict_3)

# 删除整个字典
# del dict_3
# print(dict_3)  # 此时就打印不出dict_2的数据了，因为已经将整个字典给删除了

# 清空字典
dict_3.clear()
print(dict_3)

print("======================================================")

dict_4 = {"name": "tom", "age": 20, "sex": "男", "height": 179}
"""判断数据是否存在，只判断key，不判断value"""
print("name" in dict_4)  # 返回True
print("tom" in dict_4)  # 返回False，

print("======================================================")

"""遍历字典打印所有的key"""
for k in dict_4.keys():
    print(k)
print("======================================================")

"""遍历字典打印所有的value"""
for v in dict_4.values():
    print(v)
print("======================================================")

"""遍历字典打印所有的键值对"""
for item in dict_4.items():
    print(item)
print("======================================================")

"""解包打印"""
for k,v in dict_4.items():
    print(f"当前元素的key是：{k}，value是：{v}")
print("======================================================")

"""获取所有的key"""
print(dict_4.keys())
print(list(dict_4.keys()))  # 将字典转换成列表

"""获取所有的value"""
print(dict_4.values())

"""获取所有的键值对"""
print(dict_4.items())